Date:
07.11.2012 - 17:38:15
Author:
Rewrite:
Type here:
<?PHP ################################################# ### Scripted by PhoOwned ### ### All rights reserverd ### ### Do not use/distribute without permission! ### ### Contact: phoowned@wp.pl ### ### jerzyskalski@wp.pl ### ################################################# /* In MySQL: CREATE TABLE `characters_auctions` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `state` TINYINT( 1 ) NOT NULL DEFAULT '0' , `finish_time` INT NOT NULL , `char_id` INT NOT NULL , `buy_now` INT NOT NULL , `bid` INT NOT NULL , `bidder` INT NOT NULL , INDEX ( `finish_time` )); */ $add_character_page_access = 3; $auctions_default_time = 3 * 24;// auction item in hours // styles and scripts $main_content .= ' <style type="text/css"> .tableFonts {color: #FFFFFF} .tableRow0 {background-color: #F1E0C6;text-align: left;vertical-align: middle;font-size: 12pt} .tableRow1 {background-color: #D4C0A1;text-align: left;vertical-align: middle;font-size: 12pt} .tableRowSmall0 {background-color: #F1E0C6;text-align: left;vertical-align: middle;font-size: 10pt} .tableRowSmall1 {background-color: #D4C0A1;text-align: left;vertical-align: middle;font-size: 10pt} .linkButton {font-size: 14pt;padding: 6px;text-shadow: 2mm 2mm 2mm #342423;letter-spacing: 2mm} .linkButton:hover {font-size: 16pt;} .bigText {font-size: 24pt} .normalText {font-size: 12pt;} .showItemSquare {height: 49px;width: 39px;padding: 7px;} .showItemImage {height: 40px;width: 40px;padding: 0px;} input {text-align: right;} .er{display:block} .er *{ display:block; height:1px; overflow:hidden; font-size:.01em; background:#b20000} .er1{ margin-left:3px; margin-right:3px; padding-left:1px; padding-right:1px; border-left:1px solid #870000; border-right:1px solid #870000; background:#9f0000} .er2{ margin-left:1px; margin-right:1px; padding-right:1px; padding-left:1px; border-left:1px solid #6f0000; border-right:1px solid #6f0000; background:#a30000} .er3{ margin-left:1px; margin-right:1px; border-left:1px solid #a30000; border-right:1px solid #a30000;} .er4{ border-left:1px solid #870000; border-right:1px solid #870000} .er5{ border-left:1px solid #9f0000; border-right:1px solid #9f0000} .erfg{ background:#b20000;font-size: 16pt;text-align: center} </style> <script type="text/javascript"> function checkLogin(account_id) { if(account_id == 0) { alert ("You are not logged in."); return false } return true } function checkBid(account_id, bidder_id, user_points, bid_now) { if(!checkLogin(account_id)) return false var bid = window.document.getElementById("bid").value; if(bid <= bid_now) { alert ("Current highest bid is " + bid_now + ". You can not bid " + bid + "."); return false } if(bid > user_points) { alert ("You can not bid " + bid + ". You have only " + user_points + "."); return false } if(account_id == bidder_id) { var answer = confirm ("You have highest bid in this auction. Are you sure you want make higher bid?") if (answer) return true else return false } return true } function checkBuyNow(account_id, user_points, buy_now) { if(!checkLogin(account_id)) return false if(user_points < buy_now) { alert ("This character cost " + buy_now + ". You have only " + user_points + "."); return false } var answer = confirm ("This character cost " + buy_now + ". Do you want to buy it?") if (answer) return true else return false } var innerHTML; function countdown(Time_Left, target_id) { if(Time_Left <= 0) { document.getElementById(target_id).innerHTML = \'Finished\'; return 0; } setTimeout(countdown, 1000, Time_Left-1, target_id); //More datailed. days = Math.floor(Time_Left / (60 * 60 * 24)); Time_Left %= (60 * 60 * 24); hours = Math.floor(Time_Left / (60 * 60)); Time_Left %= (60 * 60); minutes = Math.floor(Time_Left / 60); Time_Left %= 60; seconds = Time_Left; dps = \'s\'; hps = \'s\'; mps = \'s\'; sps = \'s\'; //ps is short for plural suffix. if(days == 1) dps =\'\'; if(hours == 1) hps =\'\'; if(minutes == 1) mps =\'\'; if(seconds == 1) sps =\'\'; innerHTML = days + \' day\' + dps + \' \'; innerHTML += hours + \' hour\' + hps + \' \'; innerHTML += minutes + \' minute\' + mps + \' and \'; innerHTML += seconds + \' second\' + sps; document.getElementById(target_id).innerHTML = innerHTML; } </script>'; $errorFormStart = '<div><b class="er"><b class="er1"><b></b></b><b class="er2"><b></b></b><b class="er3"></b><b class="er4"></b><b class="er5"></b></b><div class="erfg">'; $errorFormEnd = '</div><b class="er"><b class="er5"></b><b class="er4"></b><b class="er3"></b><b class="er2"><b></b></b><b class="er1"><b></b></b></b></div>'; function time_left($integer) { if($integer <= 0) return "Finished"; $seconds=$integer; if ($seconds/60 >=1) { $minutes=floor($seconds/60); if ($minutes/60 >= 1) { # Hours $hours=floor($minutes/60); if ($hours/24 >= 1) { #days $days=floor($hours/24); if ($days/7 >=1) { #weeks $weeks=floor($days/7); if ($weeks>=2) $return="$weeks weeks"; else $return="$weeks week"; } #end of weeks $days=$days-(floor($days/7))*7; if ($weeks>=1 && $days >=1) $return="$return, "; if ($days >=2) $return="$return $days d"; if ($days ==1) $return="$return $days d"; } #end of days $hours=$hours-(floor($hours/24))*24; if ($days>=1 && $hours >=1) $return="$return, "; if ($hours >=2 || $hours ==0) $return="$return $hours h"; if ($hours ==1) $return="$return $hours h"; } #end of Hours $minutes=$minutes-(floor($minutes/60))*60; if ($hours>=1 && $minutes >=1) $return="$return, "; if ($minutes >=2 || $minutes ==0) $return="$return $minutes m"; if ($minutes ==1) $return="$return $minutes m"; } #end of minutes $seconds=$integer-(floor($integer/60))*60; if ($minutes>=1 && $seconds >=1) $return="$return, "; if ($seconds >=2 || $seconds ==0) $return="$return $seconds sec"; if ($seconds ==1) $return="$return $seconds sec"; $return="$return."; return $return; } ############ FINISH AUCTIONS AND ADD CHARACTERS ############ foreach($SQL->query('SELECT * FROM `characters_auctions` WHERE `state` = 0 AND `finish_time` <= ' . time())->fetchAll() as $finishedAuction) { if($finishedAuction['bidder'] > 0) { // if server show error in one of lines below it mean // someone delete character or account that won auction // admin must check it manualy (give points back to account that won auction?) $finishedAuctionBidder = new Account($finishedAuction['bidder']); $finishedAuctionChar = new Player($finishedAuction['char_id']); $finishedAuctionChar->setAccount($finishedAuctionBidder); $finishedAuctionChar->setGroup(1); $finishedAuctionChar->save(); $SQL->query('UPDATE `characters_auctions` SET `state` = 2 WHERE `id` = ' . $finishedAuction['id']); //$SQL->query('INSERT INTO `bans` (`id` , `type` , `value` ,`param` ,`active` ,`expires` ,`added` ,`admin_id` ,`comment` ,`reason` ,`action` ,`statement`) VALUES (NULL , 2, ' .$auctionChar->getId() . ', 2, 1, -1, ' . time() . ', 1, \'BUY CHAR\', 0, 1, \'\');'); } else $SQL->query('UPDATE `characters_auctions` SET `state` = 1 WHERE `id` = ' . $finishedAuction['id']); } ############ VISIBLE THINGS ############ if($logged && $account_logged->getPageAccess() >= $add_character_page_access) $main_content .= '<div class="normalText"><a href="?subtopic=sellchar&action=addauction">ADMIN PANEL: >ADD AUCTION<</a></div>'; if($action == "addauction") ############ ADD AUCTION / VIEW CHARACTERS LIST ############ { if($logged && $account_logged->getPageAccess() >= $add_character_page_access) { $daysAgo = (int) $_REQUEST['days_ago']; $nameContains = $_REQUEST['name_contains']; $minLevel = (int) $_REQUEST['min_level']; $maxLastLogout = time() - $daysAgo * 24 * 3600; $orderBy = ($_REQUEST['order_by'] == 'lastlogout') ? $_REQUEST['order_by'] : 'level'; $orderType = ($_REQUEST['order_type'] == 'DESC') ? $_REQUEST['order_type'] : 'ASC'; $resultsLimit = (isset($_REQUEST['results_limit'])) ? (int) $_REQUEST['results_limit'] : 30; if(isset($_REQUEST['id'])) { $id = (int) $_REQUEST['id']; $priceAuction = (int) $_REQUEST['price_auction']; $priceBuyNow = (int) $_REQUEST['price_buy_now']; $auctionTime = (int) $_REQUEST['auction_time'] * 3600; $SQL->query('INSERT INTO `characters_auctions` (`id` ,`finish_time` ,`char_id` ,`buy_now` ,`bid` ,`bidder`) VALUES (NULL , ' . (time() + $auctionTime) . ', ' . $id . ', ' . $priceBuyNow . ', ' . $priceAuction . ', 0);'); $main_content .= $errorFormStart . 'Character with ID ' . $id . ' auction added.' . $errorFormEnd; } $charsAlreadyOnAuctions = array(0); foreach($SQL->query('SELECT `char_id` FROM `characters_auctions` WHERE `state` = 0') as $charsAlreadyOnAuction) $charsAlreadyOnAuctions[] = $charsAlreadyOnAuction['char_id']; $main_content .= '<div class="bigText" style="text-align: center">Add Auction</div>'; $main_content .= '<div class="normalText">If you leave Buy Now field empty or set it to 0 it will be not possible to buy character by option \'Buy Now\'.</div>'; $main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto;">'; $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="8">CHARACTERS LIST</td></tr>'; $main_content .= '<form action="?" method="get"><input type="hidden" name="subtopic" value="sellchar" /><input type="hidden" name="action" value="addauction" />'; $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'" style="font-size: 10pt;"><td colspan="2">ORDER BY</td><td><select name="order_by"><option' . (($orderBy == 'lastlogout') ? ' selected="selected"' : '') . '>lastlogout</option><option' . (($orderBy == 'level') ? ' selected="selected"' : '') . '>level</option></select></td><td><select name="order_type"><option' . (($orderType == 'ASC') ? ' selected="selected"' : '') . '>ASC</option><option' . (($orderType == 'DESC') ? ' selected="selected"' : '') . '>DESC</option></select></td><td colspan="4"></td></tr>'; $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'" style="font-size: 10pt;"><td colspan="3">Nick contains:<br /><input type="text" name="name_contains" value="' . htmlspecialchars($nameContains) .'" size="30" /><td colspan="2">Min. <input type="text" name="min_level" value="' . $minLevel .'" size="4" /> level</td><td>Min. <input type="text" name="days_ago" value="' . $daysAgo .'" size="2" /> days</td><td>Results<br /><input type="text" name="results_limit" value="' . $resultsLimit .'" size="3" /></td><td><input type="submit" value="Search"/></td></tr>'; $main_content .= '</form>'; ############ SEARCH FORM ############ $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'" style="font-size: 14pt;"><td>ID</td><td>Nick</td><td>Level & Vocation</td><td>Offline</td><td>Auction time</td><td>Auction min. offer</td><td>Buy Now</td><td>Add</td></tr>'; foreach($SQL->query('SELECT * FROM `players` WHERE `id` NOT IN (' . implode(",", $charsAlreadyOnAuctions) . ') AND `lastlogout` > 0 AND `level` >= ' . $SQL->quote($minLevel) . ' AND `lastlogout` <= ' . $SQL->quote($maxLastLogout) . ' AND `name` LIKE ' . $SQL->quote('%'.$nameContains.'%') . ' ORDER BY `' . $orderBy . '` ' . $orderType . ', `name` ASC LIMIT ' . $resultsLimit .';') as $player) { $main_content .= '<form action="?subtopic=sellchar&action=addauction&order_by=' . $orderBy .'&order_type=' . $orderType . '&name_contains=' . urlencode($nameContains) . '&min_level=' . $minLevel . '&days_ago=' . $daysAgo . '&results_limit=' . $resultsLimit . '" method="post"><input type="hidden" name="id" value="' . $player['id'] . '" /><tr class="tableRow' . ($row++ % 2) . '"><td>' . $player['id'] . '</td><td>' . $player['name'] . '</td><td>' . $player['level'] . ' ' . htmlspecialchars(Website::getVocationName($player['vocation'], $player['promotion'])) . '</td><td style="float: right;">' . (floor((time() - $player['lastlogin']) / 86400)) . ' days</td><td><input type="text" name="auction_time" value="' . $auctions_default_time . '" size="3" /> hours</td><td><input type="text" name="price_auction" value="" size="5" /> pp</td><td><input type="text" name="price_buy_now" value="" size="5" /> pp</td><td><input type="submit" value="Add Auction" /></td></tr></form>'; } $main_content .= '</table>'; } else $main_content .= $errorFormStart . 'ERROR! You do not have access to this page.' . $errorFormEnd; } elseif($action == "show") ############ SHOW CHARACTER INFO ############ { $auctionInfo = $SQL->query('SELECT * FROM `characters_auctions` WHERE `id` = ' . (int) $_REQUEST['id'])->fetch(); $main_content .= '<div class="bigText" style="text-align: center">Auction Info</div>'; if(isset($auctionInfo['id'])) { $auctionChar = new Player($auctionInfo['char_id']); if($auctionChar->isLoaded()) { if($logged && $account_logged->getPageAccess() >= $add_character_page_access) $main_content .= '<div class="normalText"><a href="?subtopic=sellchar&delete=' . $auctionInfo['id'] . '">ADMIN PANEL: >DELETE AUCTION<</a></div>'; ############ SHOW STATS ############ $row = 0; $main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto;">'; $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="3">CHARACTER INFO</td></tr>'; $main_content .= '<tr><td><table style="width: 360px;border-spacing: 1px">'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>AUCTION ID:</td><td>' . $auctionInfo['id'] . '</td></tr>'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Name:</td><td>' . $auctionChar->getName() . '<br /><div style="font-size: 8pt;">(You select new name when you win auction.)</div></td></tr>'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Level:</td><td>' . $auctionChar->getLevel() . '</td></tr>'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Vocation:</td><td>' . htmlspecialchars(Website::getVocationName($auctionChar->getVocation(), $auctionChar->getPromotion())) . '</td></tr>'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Health:</td><td>' . $auctionChar->getHealthMax() . '</td></tr>'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Mana:</td><td>' . $auctionChar->getManaMax() . '</td></tr>'; $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Magic Level:</td><td>' . $auctionChar->getMagLevel() . '</td></tr>'; $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Sword:</td><td>' . $auctionChar->getSkill(2) . '</td></tr>'; $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Axe:</td><td>' . $auctionChar->getSkill(3) . '</td></tr>'; $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Club:</td><td>' . $auctionChar->getSkill(1) . '</td></tr>'; $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Distance:</td><td>' . $auctionChar->getSkill(4) . '</td></tr>'; $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Shielding:</td><td>' . $auctionChar->getSkill(5) . '</td></tr>'; $main_content .= '</table></td>'; ############ SHOW EQ ############ $main_content .= '<td>'; $itemsList = $auctionChar->getItems(); $main_content .= '<table with=100% style="border: solid 1px #888888;" CELLSPACING="1"><TR>'; $list = array('2','1','3','6','4','5','9','7','10','8'); foreach ($list as $number_of_items_showed => $slot) { if($slot == '8') // add Soul before show 'feet' { $main_content .= '<td style="background-color: '.$config['site']['darkborder'].'; text-align: center;">Soul:<br/>'. $auctionChar->getSoul() .'</td>'; } if($itemsList->getSlot($slot) === false) // item does not exist in database { $main_content .= '<TD style="background-color: '.$config['site']['darkborder'].';"><img src="images/items/'. $slot .'.gif" width="45"/></TD>'; } else { $main_content .= '<TD style="background-color: '.$config['site']['darkborder'].';"><img src="images/items/'. $itemsList->getSlot($slot)->getID() . '.gif" width="45"/></TD>'; } if($number_of_items_showed % 3 == 2) { $main_content .= '</tr><tr>'; } if($slot == '8') // add Capacity after show 'feet' { $main_content .= '<td style="background-color: '.$config['site']['darkborder'].'; text-align: center;">Cap:<br/>'. $auctionChar->getCap() .'</td>'; } } $main_content .= '</tr></TABLE>'; $main_content .= '</td>'; $main_content .= '</tr></table>'; ############ SHOW DONATORS SHOP ITEMS ############ $donators_items = $SQL->query('SELECT `player_items`.`itemtype`, SUM(`player_items`.`count`) AS count, `z_shop_offer`.`offer_name` AS name FROM `player_items`, `z_shop_offer` WHERE `player_items`.`player_id` = ' . $auctionChar->getId() . ' AND `z_shop_offer`.`offer_type` = \'item\' AND `player_items`.`itemtype` = `z_shop_offer`.`itemid1` GROUP BY `player_items`.`itemtype`;')->fetchAll(); $donators_depotitems = $SQL->query('SELECT `player_depotitems`.`itemtype`, SUM(`player_depotitems`.`count`) AS count, `z_shop_offer`.`offer_name` AS name FROM `player_depotitems`, `z_shop_offer` WHERE `player_depotitems`.`player_id` = ' . $auctionChar->getId() . ' AND `z_shop_offer`.`offer_type` = \'item\' AND `player_depotitems`.`itemtype` = `z_shop_offer`.`itemid1` GROUP BY `player_depotitems`.`itemtype`;')->fetchAll(); if(count($donators_items) > 0 || count($donators_depotitems) > 0) { $main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto;padding-top: 30px;">'; if(count($donators_items) > 0) { $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="3">DONATORS ITEMS</td></tr>'; $row = 0; foreach($donators_items as $donator_item) $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td class="showItemSquare"><img src="/images/items/'. $donator_item['itemtype'] . '.gif" alt="" class="showItemImage"/></td><td>' . $donator_item['count'] .'x</td><td>' . $donator_item['name'] . '</td></tr>'; } if(count($donators_depotitems) > 0) { $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="3">DONATORS IN DEPOT</td></tr>'; $row = 0; foreach($donators_depotitems as $donator_depotitem) $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td class="showItemSquare"><img src="/images/items/'. $donator_depotitem['itemtype'] . '.gif" alt="" class="showItemImage"/></td><td>' . $donator_depotitem['count'] .'x</td><td>' . $donator_depotitem['name'] . '</td></tr>'; } $main_content .= '</table>'; } ############ SHOW AUCTION INFO ############ $row = 0; $main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto;padding-top: 30px;">'; $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="2">AUCTION INFO</td></tr>'; if($auctionInfo['buy_now'] > 0) $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Buy now:</td><td>' . $auctionInfo['buy_now'] . ' premium points</td></tr>'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Highest bid:</td><td>' . $auctionInfo['bid'] . ' premium points</td></tr>'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Time left:</td><td><div name="timer_' . $auctionInfo['id'] . '" id="timer_' . $auctionInfo['id'] . '">' . time_left($auctionInfo['finish_time'] - time()) . '</div></td></tr>'; $main_content .= '</table><br /><script type="text/javascript">countdown(' . ($auctionInfo['finish_time'] - time()) . ', \'timer_' . $auctionInfo['id'] . '\');</script>'; if($auctionInfo['state'] == 0) { $main_content .= '<form action="?subtopic=sellchar&action=bid&id=' . $auctionInfo['id'] . '" method="post" onsubmit="return checkBid(' . (($logged) ? $account_logged->getId() : 0) . ', ' . $auctionInfo['bidder'] . ', ' . (($logged) ? $account_logged->getPremiumPoints() : 0) . ', ' . $auctionInfo['bid'] . ');">'; $main_content .= '<table class="tableFonts" style="float: left;">'; $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="2">YOUR BID</td></tr>'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Bid:</td><td><input type="text" id="bid" name="bid" value="' . ($auctionInfo['bid'] + 1) . '" /> pp</td></tr>'; $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td colspan="2" style="text-align: center;"><input type="submit" value="BID" /></td></tr></table></form><br />'; if($auctionInfo['buy_now'] > 0) $main_content .= '<a href="?subtopic=sellchar&action=buy&id=' . $auctionInfo['id'] . '" class="linkButton" style="float: right;" onclick="return checkBuyNow(' . (($logged) ? $account_logged->getId() : 0) . ', ' . (($logged) ? $account_logged->getPremiumPoints() : 0) . ', ' . $auctionInfo['buy_now'] . ');">BUY NOW!</a>'; } $main_content .= '<div style="padding-top: 120px;padding-left: 45%"><a href="?subtopic=sellchar" class="linkButton">BACK</a></div>'; } else $main_content .= $errorFormStart . 'ERROR! Character doesn\'t exist.' . $errorFormEnd; } else $main_content .= $errorFormStart . 'ERROR! Auction with this ID doesn\'t exist.' . $errorFormEnd; } elseif($action == "bid") ############ BID CHARACTER ############ { $main_content .= '<div class="bigText" style="text-align: center">Bid character</div>'; if($logged) { $auctionInfo = $SQL->query('SELECT * FROM `characters_auctions` WHERE `state` = 0 AND `id` = ' . (int) $_REQUEST['id'])->fetch(); if(isset($auctionInfo['id'])) { $auctionChar = new Player($auctionInfo['char_id']); if($auctionChar->isLoaded()) { if($account_logged->getPremiumPoints() > $auctionInfo['bid'] || ($account_logged->getId() == $auctionInfo['bidder'] && $account_logged->getPremiumPoints() > 0)) { if(isset($_REQUEST['bid']) && (int) $_REQUEST['bid'] > 0) { $userBid = (int) $_REQUEST['bid']; if($account_logged->getPremiumPoints() >= $userBid || ($account_logged->getId() == $auctionInfo['bidder'] && $account_logged->getPremiumPoints() + $auctionInfo['bid'] >= $userBid)) { if($userBid > $auctionInfo['bid']) { if($account_logged->getId() != $auctionInfo['bidder']) { $last_bidder = new Account($auctionInfo['bidder']); if($last_bidder->isLoaded()) { $last_bidder->setPremiumPoints($last_bidder->getPremiumPoints() + $auctionInfo['bid']); $last_bidder->save(); } $account_logged->setPremiumPoints($account_logged->getPremiumPoints() - $userBid); } else $account_logged->setPremiumPoints($account_logged->getPremiumPoints() + $auctionInfo['bid'] - $userBid); $account_logged->save(); $SQL->query('UPDATE `characters_auctions` SET `bid` = ' . $userBid . ', `bidder` = ' . $account_logged->getId() . ' WHERE `id` = ' . $auctionInfo['id']); if($auctionInfo['finish_time'] - time() < 60) $SQL->query('UPDATE `characters_auctions` SET `finish_time` = ' . time() + 60 . ' WHERE `id` = ' . $auctionInfo['id']); $main_content .= '<div class="normalText">You have bidded ' . $userBid . ' premium points on auction ID ' . $auctionInfo['id'] . '!</div>'; $main_content .= '<div style="padding-top: 120px;padding-left: 45%"><a href="?subtopic=sellchar&action=show&id=' . $auctionInfo['id'] . '" class="linkButton">BACK</a></div>'; } else $main_content .= $errorFormStart . 'Sorry! Your bid is lower then current highest bid.<br />Your bid is: ' . $userBid . '<br />Highest bid: ' . $auctionInfo['bid'] . '' . $errorFormEnd; } else $main_content .= $errorFormStart . 'Sorry! You do not have enought premium points.<br />Your bid is: ' . $userBid . '<br />You have: ' . $account_logged->getPremiumPoints() . '' . $errorFormEnd; } else $main_content .= $errorFormStart . 'You must bid more then 0.' . $errorFormEnd; } else $main_content .= $errorFormStart . 'Sorry! You do not have enought premium points.<br />Highest bid is: ' . $auctionInfo['bid'] . '<br />You have: ' . $account_logged->getPremiumPoints() . '' . $errorFormEnd; } else $main_content .= $errorFormStart . 'ERROR! Character doesn\'t exist.' . $errorFormEnd; } else $main_content .= $errorFormStart . 'ERROR! Auction with this ID doesn\'t exist.' . $errorFormEnd; } else $main_content .= $errorFormStart . 'You are not logged in.' . $errorFormEnd; } elseif($action == "buy") ############ BUY CHARACTER ############ { $main_content .= '<div class="bigText" style="text-align: center">Buy character</div>'; if($logged) { $auctionInfo = $SQL->query('SELECT * FROM `characters_auctions` WHERE `state` = 0 AND `id` = ' . (int) $_REQUEST['id'])->fetch(); if(isset($auctionInfo['id'])) { if($auctionInfo['buy_now'] > 0) { $auctionChar = new Player($auctionInfo['char_id']); if($auctionChar->isLoaded()) { if($account_logged->getPremiumPoints() >= $auctionInfo['buy_now'] || ($account_logged->getId() == $auctionInfo['bidder'] && $account_logged->getPremiumPoints() + $auctionInfo['bid'] >= $auctionInfo['buy_now'])) { if($account_logged->getId() != $auctionInfo['bidder']) { $last_bidder = new Account($auctionInfo['bidder']); if($last_bidder->isLoaded()) { $last_bidder->setPremiumPoints($last_bidder->getPremiumPoints() + $auctionInfo['bid']); $last_bidder->save(); } $account_logged->setPremiumPoints($account_logged->getPremiumPoints() - $auctionInfo['buy_now']); } else $account_logged->setPremiumPoints($account_logged->getPremiumPoints() + $auctionInfo['bid'] - $auctionInfo['buy_now']); $account_logged->save(); $auctionChar->setAccount($account_logged); $auctionChar->setGroup(1); $auctionChar->save(); $SQL->query('INSERT INTO `bans` (`id` , `type` , `value` ,`param` ,`active` ,`expires` ,`added` ,`admin_id` ,`comment` ,`reason` ,`action` ,`statement`) VALUES (NULL , 2, ' .$auctionChar->getId() . ', 2, 1, -1, ' . time() . ', 1, \'BUY CHAR\', 0, 1, \'\');'); $SQL->query('UPDATE `characters_auctions` SET `state` = 2, `finish_time` = ' . time() . ', `bidder` = ' . $account_logged->getId() . ', `bid` = `buy_now` WHERE `id` = ' . $auctionInfo['id']); $main_content .= '<div class="normalText">You have bought new character! Character is now on your account. Login in game and select new name for your character.</div>'; $main_content .= '<div style="padding-top: 120px;padding-left: 45%"><a href="?subtopic=sellchar" class="linkButton">BACK</a></div>'; } else $main_content .= $errorFormStart . 'Sorry! You do not have enought premium points.<br />It cost: ' . $auctionInfo['buy_now'] . '<br />You have: ' . $account_logged->getPremiumPoints() . '' . $errorFormEnd; } else $main_content .= $errorFormStart . 'ERROR! Character doesn\'t exist.' . $errorFormEnd; } else $main_content .= $errorFormStart . 'ERROR! You can not buy this character by Buy Now option. You can only Bid on auction.' . $errorFormEnd; } else $main_content .= $errorFormStart . 'ERROR! Auction with this ID doesn\'t exist.' . $errorFormEnd; } else $main_content .= $errorFormStart . 'You are not logged in.' . $errorFormEnd; } else ############ SHOW LIST OF AUCTIONS ############ { if(isset($_REQUEST['delete'])) if($logged && $account_logged->getPageAccess() >= $add_character_page_access) { $SQL->query('DELETE FROM `characters_auctions` WHERE `id` = ' . (int) $_REQUEST['delete']); $main_content .= $errorFormStart . 'Auction ' . (int) $_REQUEST['delete'] . ' should be deleted.' . $errorFormEnd; } else $main_content .= $errorFormStart . 'You can not delete. You do not have access.' . $errorFormEnd; $main_content .= '<div class="bigText" style="text-align: center">Characters Auctions</div>'; $main_content .= '<div class="normalText">With this system you can buy un-used (inactive) characters by auctioning for them. When you bid on a character it will automatically take premium points from your account. If someone out-bids you, you will get those premium points added back to your account. If the auction time is under 2 minutes when someone bids, 1 minute will automatically be added to the auction time to give time for a re-bid from the previous bidder. If you choose to "buy now" you will get the character within 1 minute.</div>'; $main_content .= '<table class="tableFonts"><tr style="background-color:'.$config['site']['vdarkborder'].'" style="font-size: 28px;text-align: center"><td>Time left</td><td>Char info</td><td>Buy now</td><td>Highest bid</td></tr>'; $timers = array(); foreach($SQL->query('SELECT * FROM `characters_auctions` WHERE `finish_time` > ' . time())->fetchAll() as $auctionInfo) { $auctionChar = new Player($auctionInfo['char_id']); if($auctionChar->isLoaded()) $main_content .= '<tr class="tableRow' . ($row++ % 2) . '" style="font-size: 16px;text-align: center" onclick="window.location = \'?subtopic=sellchar&action=show&id=' . $auctionInfo['id'] . '\'"><td><div id="timer_' . $auctionInfo['id'] . '">' . time_left($auctionInfo['finish_time'] - time()) . '</div></td><td>' . $auctionChar->getLevel() . ' ' . htmlspecialchars(Website::getVocationName($auctionChar->getVocation(), $auctionChar->getPromotion())) . '</td><td>' . $auctionInfo['buy_now'] . ' pp</td><td>' . $auctionInfo['bid'] . ' pp</td></tr>'; $timers['timer_' . $auctionInfo['id']] = $auctionInfo['finish_time'] - time(); } $main_content .= '</table><br /><div class="normalText">Press on auction to get more informations.</div>'; $main_content .= '<script type="text/javascript">'; foreach($timers as $timer_id => $time_left) $main_content .= 'countdown(' . $time_left . ', \'' . $timer_id . '\');'; $main_content .= '</script>'; } $main_content .= '<br /><br />'; ?>